草庐IT

c++ - GLSL : Replace large uniform int array with buffer or texture

全部标签

c++ - 通过 GLSL 将 YV12 转换为 RGB 的问题

我正在尝试完成YV12到RGB的转换inthispost使用GLSL着色器。我的应用程序从磁盘加载原始YV12帧并尝试使用GLSL着色器执行转换。但是,生成的图像垂直翻转并且存在一些颜色问题。我认为问题可能是图像被读取为char数组(1字节),然后转换为GLushort数组(2字节)。你怎么看?这是原始YUV帧的样子:andtherawframeloadedbytheapplicationcanbedownloadedfromhere.这是我得到的输出:我在下面分享应用程序的源代码:#include#include#include#include#include#include#inc

c++ - 多个 GLSL 统一缓冲区

我在使用多个统一缓冲区时遇到问题。这是我的GLSL代码:layout(std140)uniformMaterialInfo{vec3Ka;vec3Ks;vec3Kd;};layout(std140)uniformLightInfo{vec3La;vec3Ls;vec3Ld;};这就是我创建和填充缓冲区的方式:blockIndex=glGetUniformBlockIndex(program,"MaterialInfo");if(blockIndex==-1){fprintf(stderr,"Couldnotbinduniformblock\n");}glGenBuffers(1,&ma

ios - 仅在 iOS 上存在 GLSL 透明度问题

我的LibGDX应用程序中有一个非常简单的着色器,它可以在Windows10、MacOS和各种Android设备上完美运行,但在iOS上一切都是黑色的(使用两台设备进行测试)。是否有一个常见的“陷阱”可以解释这一点?解决方案:我必须在片段着色器的顶部添加以下内容:#ifdefGL_ESprecisionmediumpfloat;#endif现在它无处不在。 最佳答案 如果您或库不检查错误返回,则通常会在没有任何明显原因的情况下出现黑屏,因为渲染上下文正在悄悄失败。某些事情可能会失败的原因有多种。这些主要是由驱动程序不支持您所依赖的功

ios - GLSL ES 裁剪顶点到远平面

我在我的iPhone上玩弄阴影体积,如果阴影体积上限被远平面裁剪,则一切正常。由于gl_ClipVertex在GLSLES中不可用,我如何将gl_Position.z剪辑到远平面?我已经尝试使用gl_Position.z=gl_Position.w,但结果是错误的,阴影体积似乎跟随相机方向。还有其他方法吗? 最佳答案 为了使阴影体积起作用,您可能需要避免cap被远平面剪裁。为此,要么增加深度范围(将远平面移得更远),要么减少挤压量。有许多阴影体积技术,其中一些是专门为避免深度封顶而设计的。我最喜欢的是Carmack的逆向,只要您知道

ios - 用于全分辨率图像处理的 GLSL?

我目前正在使用GLSL着色器为iOS设备上的实时视频渲染效果。视频分辨率为640x480。当您拍摄照片时,图像可以以高达5mp的任何分辨率进入。我想知道是否有任何方法可以将相同的GLSL着色器应用于例如5mp纹理。 最佳答案 这仅取决于您的图形驱动程序/设备是否支持大型纹理和渲染目标。如果是,那绝对没问题,GLSL不关心纹理或渲染目标大小。 关于ios-用于全分辨率图像处理的GLSL?,我们在StackOverflow上找到一个类似的问题: https://s

ios - yv12 到 rgb 在 iOS 中使用 glsl,附上结果图像

referredtothisquestion我使用glsl着色器将yv12帧数据转换为rgb数据,原始图像如下:但结果图像与前者不一样,附在下面:以下是我将三个平面数据上传到纹理的代码:-(GLuint)textureY:(Byte*)imageDatawidthType:(int)widthheightType:(int)height{GLuinttexName;glGenTextures(1,&texName);glBindTexture(GL_TEXTURE_2D,texName);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILT

ios - 多次调用 glDrawElements 是否比在 GLSL 中对每个片段进行相同的计算更有效?

我正在试验GLSL(在iOS中),我编写了一个简单的着色器,它为两个圆(center、radius和边缘平滑)。它是在整个屏幕上使用单个四边形绘制的,着色器使用gl_FragCoord并确定每个点是在圆圈内还是圆圈外-它计算圆圈内的alpha为1.0,平滑地向下着色到0.0在radius+edgeSmoothing之外,然后它对alpha应用镜像式钳位(三角波以获得奇偶填充规则效果)并设置gl_FragColor=mix(vec4(0.0),颜色,alpha);.这很好用,但我想要5种不同颜色的10个圆圈,所以我为所有着色器制服调用glUniform并调用glDrawElements分

android - GLSL IF 速度与乘数

我知道这个问题通常被问到,但答案总是“视情况而定”,所以我提出了一个具体问题,希望能得到具体答案。我知道IF在GLSL上的缺点,它们可能非常昂贵,甚至在某些硬件中执行所有代码。所以,我有一个来自示例(双抛物面阴影贴图)的fragment着色器,它使用if's来确定要使用哪个贴图并计算深度,但我知道用乘数替换那些if's非常容易,问题是fragment着色器中是否有纹理采样,使用if或使用乘法器过滤未使用的数据会更快?这些是建议的代码:IF版本://Alphaisavariablecomputedonthefly,cannotbereplacedfloatdepth=0;floatmyd

ios - 如何使用 GLSL 在没有 alpha 混合的情况下组合两个纹理

我正在尝试使用opengles2.0中的着色器组合两个纹理如您在屏幕截图中所见,我正在尝试使用动态环境映射在后向对象上创建针状反射。但是,针的反射看起来是半透明的,并且与我的环境贴图融为一体。这是我的片段着色器;varyinghighpvec4R;uniformsamplerCubecube_map1;uniformsamplerCubecube_map2;voidmain(){mediumpvec3output_color1;mediumpvec3output_color2;output_color1=textureCube(cube_map1,R.xyz).rgb;output_c

javascript - WebGL GLSL 片段着色器不适用于 iOS

我正在使用here中的经典柏林噪声(vec3)函数.当我在我的MacBook上渲染这个着色器时,着色器运行良好,并像我预期的那样将噪声显示为颜色。当我在我的iPhone上渲染这个着色器时,Canvas是全黑的。这段代码有什么问题会导致cnoise函数总是返回0吗?或者是否有一些功能不适用于Metal?这是完整的着色器:#ifdefGL_ESprecisionmediumpfloat;#endifuniformvec2u_resolution;uniformfloatu_time;vec4permute(vec4x){returnmod(((x*34.0)+1.0)*x,289.0);}